<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>复习类</title>
</head>
<body>
    <script type="text/javascript">
        /*
            总结
            1.类中的构造器不是必须写的，要对实例进行一些初始化操作，如添加指定属性时采写
            2.如果A类继承了B类，且A类中写了构造器，那么A类构造器中的super是必须要调用的。
            3.类中所定义的方法，都是放在了类的原型对象上，供实例去使用
        */
        class Person{
            //构造器方法
            constructor(name,age){
                this.name=name;
                this.age=age
            }
            speak(){
                //speak方法放在了哪里？--类的原型对象上，供实例使用
                //通过person实例调用speak时，speak中的this就是person实例
                console.log(`我叫${this.name},我${this.age}了`);
            }

        }
        
        //创建一个student类继承person
        class Student extends Person{
            constructor(name,age,grade){
                super(name,age);
                this.grade=grade;
            }

            //重写从父类继承过来的方法
            speak(){
                
                console.log(`我叫${this.name},我${this.age}了,我的年级是${this.grade}`);
            }

        }
        const s1 = new Student('小张',15,"高一")
        console.log(s1);
        s1.speak();
    </script>
</body>
</html>